home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
- <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
- <!-- $Revision: 1.5.2.4 $ -->
-
- <!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
- <modulesynopsis metafile="mod_isapi.xml.meta">
-
- <name>mod_isapi</name>
- <description>ISAPI Extensions within Apache for Windows</description>
- <status>Base</status>
- <sourcefile>mod_isapi.c</sourcefile>
- <identifier>isapi_module</identifier>
- <compatibility>Win32 only</compatibility>
-
- <summary>
- <p>This module implements the Internet Server extension API. It
- allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
- modules) to be served by Apache for Windows, subject to the
- noted restrictions.</p>
-
- <p>ISAPI extension modules (.dll files) are written by third
- parties. The Apache Group does not author these modules, so we
- provide no support for them. Please contact the ISAPI's author
- directly if you are experiencing problems running their ISAPI
- extension. <strong>Please <em>do not</em> post such problems to
- Apache's lists or bug reporting pages.</strong></p>
- </summary>
-
- <section id="usage"><title>Usage</title>
-
- <p>In the server configuration file, use
- the <directive module="mod_mime">AddHandler</directive> directive to
- associate ISAPI files with the <code>isapi-isa</code> handler, and map
- it to them with their file extensions. To enable any .dll file to be
- processed as an ISAPI extension, edit the httpd.conf file and add the
- following line:</p>
- <example>
- AddHandler isapi-isa .dll
- </example>
-
- <p>There is no capability within the Apache server to leave a
- requested module loaded. However, you may preload and keep a
- specific module loaded by using the following syntax in your
- httpd.conf:</p>
- <example>
- ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
- </example>
-
- <p>Whether or not you have preloaded an ISAPI extension, all
- ISAPI extensions are governed by the same permissions and
- restrictions as CGI scripts. That is, <directive module="core"
- >Options</directive> <code>ExecCGI</code> must be set for the
- directory that contains the ISAPI .dll file.</p>
-
- <p>Review the <a href="#notes">Additional Notes</a> and the <a
- href="#journal">Programmer's Journal</a> for additional details
- and clarification of the specific ISAPI support offered by
- <module>mod_isapi</module>.</p>
- </section>
-
- <section id="notes"><title>Additional Notes</title>
-
- <p>Apache's ISAPI implementation conforms to all of the ISAPI
- 2.0 specification, except for some "Microsoft-specific"
- extensions dealing with asynchronous I/O. Apache's I/O model
- does not allow asynchronous reading and writing in a manner
- that the ISAPI could access. If an ISA tries to access
- unsupported features, including async I/O, a message is placed
- in the error log to help with debugging. Since these messages
- can become a flood, the directive <code>ISAPILogNotSupported
- Off</code> exists to quiet this noise.</p>
-
- <p>Some servers, like Microsoft IIS, load the ISAPI extension
- into the server and keep it loaded until memory usage is too
- high, or unless configuration options are specified. Apache
- currently loads and unloads the ISAPI extension each time it is
- requested, unless the <directive module="mod_isapi"
- >ISAPICacheFile</directive> directive is specified.
- This is inefficient, but Apache's memory model makes this the
- most effective method. Many ISAPI modules are subtly
- incompatible with the Apache server, and unloading these
- modules helps to ensure the stability of the server.</p>
-
- <p>Also, remember that while Apache supports ISAPI Extensions,
- it <strong>does not support ISAPI Filters</strong>. Support for
- filters may be added at a later date, but no support is planned
- at this time.</p>
- </section>
-
- <section id="journal"><title>Programmer's Journal</title>
-
- <p>If you are programming Apache 2.0 <module>mod_isapi</module>
- modules, you must limit your calls to <code>ServerSupportFunction</code>
- to the following directives:</p>
-
- <dl>
- <dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
- <dd>Redirect the user to another location.<br />
- This must be a fully qualified URL (<em>e.g.</em>
- <code>http://server/location</code>).</dd>
-
- <dt><code>HSE_REQ_SEND_URL</code></dt>
- <dd>Redirect the user to another location.<br />
- This cannot be a fully qualified URL, you are not allowed to
- pass the protocol or a server name (<em>e.g.</em> simply
- <code>/location</code>).<br />
- This redirection is handled by the server, not the
- browser.<br />
- <note type="warning"><title>Warning</title>
- <p>In their recent documentation, Microsoft appears to have
- abandoned the distinction between the two
- <code>HSE_REQ_SEND_URL</code> functions. Apache continues to treat
- them as two distinct functions with different requirements
- and behaviors.</p>
- </note></dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
- <dd>Apache accepts a response body following the header if it
- follows the blank line (two consecutive newlines) in the
- headers string argument. This body cannot contain NULLs,
- since the headers argument is NULL terminated.</dd>
-
- <dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
- <dd>Apache considers this a no-op, since the session will be
- finished when the ISAPI returns from processing.</dd>
-
- <dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
- <dd>Apache will translate a virtual name to a physical
- name.</dd>
-
- <dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
- <dd>
- This logged message may be captured in any of the following
- logs:
-
- <ul>
- <li>in the <code>\"%{isapi-parameter}n\"</code> component in a
- <directive module="mod_log_config">CustomLog</directive>
- directive</li>
-
- <li>in the <code>%q</code> log component with the
- <directive module="mod_isapi">ISAPIAppendLogToQuery</directive>
- <code>On</code> directive</li>
-
- <li>in the error log with the <directive module="mod_isapi"
- >ISAPIAppendLogToErrors</directive> <code>On</code> directive</li>
- </ul>
-
- <p>The first option, the <code>%{isapi-parameter}n</code> component,
- is always available and preferred.</p>
- </dd>
-
- <dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
- <dd>Will return the negotiated Keep-Alive status.</dd>
-
- <dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
- <dd>Will behave as documented, although the <code>fKeepConn</code>
- flag is ignored.</dd>
-
- <dt><code>HSE_REQ_IS_CONNECTED</code></dt>
- <dd>Will report false if the request has been aborted.</dd>
- </dl>
-
- <p>Apache returns <code>FALSE</code> to any unsupported call to
- <code>ServerSupportFunction</code>, and sets the
- <code>GetLastError</code> value to
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>ReadClient</code> retrieves the request body exceeding the
- initial buffer (defined by <directive module="mod_isapi"
- >ISAPIReadAheadBuffer</directive>). Based on the
- <directive>ISAPIReadAheadBuffer</directive> setting (number of bytes
- to buffer prior to calling the ISAPI handler) shorter requests are sent
- complete to the extension when it is invoked. If the request is
- longer, the ISAPI extension must use <code>ReadClient</code> to
- retrieve the remaining request body.</p>
-
- <p><code>WriteClient</code> is supported, but only with the
- <code>HSE_IO_SYNC</code> flag or no option flag (value of
- <code>0</code>). Any other <code>WriteClient</code> request
- will be rejected with a return value of <code>FALSE</code>, and a
- <code>GetLastError</code> value of
- <code>ERROR_INVALID_PARAMETER</code>.</p>
-
- <p><code>GetServerVariable</code> is supported, although extended server
- variables do not exist (as defined by other servers.) All the
- usual Apache CGI environment variables are available from
- <code>GetServerVariable</code>, as well as the <code>ALL_HTTP</code>
- and <code>ALL_RAW</code> values.</p>
-
- <p>Apache 2.0 <module>mod_isapi</module> supports additional
- features introduced in later versions of the ISAPI specification,
- as well as limited emulation of async I/O and the
- <code>TransmitFile</code> semantics. Apache also supports preloading
- ISAPI .dlls for performance, neither of which were not available under
- Apache 1.3 <code>mod_isapi</code>.</p>
- </section>
-
- <directivesynopsis>
- <name>ISAPICacheFile</name>
- <description>ISAPI .dll files to be loaded at startup</description>
- <syntax>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
- ...</syntax>
- <contextlist><context>server config</context><context>virtual host</context>
- </contextlist>
-
- <usage>
- <p>Specifies a space-separated list of file names to be loaded
- when the Apache server is launched, and remain loaded until the
- server is shut down. This directive may be repeated for every
- ISAPI .dll file desired. The full path name of each file should
- be specified. If the path name is not absolute, it will be treated
- relative to <directive module="core">ServerRoot</directive>.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ISAPIReadAheadBuffer</name>
- <description>Size of the Read Ahead Buffer sent to ISAPI
- extensions</description>
- <syntax>ISAPIReadAheadBuffer <var>size</var></syntax>
- <default>ISAPIReadAheadBuffer 49152</default>
- <contextlist><context>server config</context><context>virtual host</context>
- <context>directory</context><context>.htaccess</context></contextlist>
- <override>FileInfo</override>
-
- <usage>
- <p>Defines the maximum size of the Read Ahead Buffer sent to
- ISAPI extensions when they are initially invoked. All remaining
- data must be retrieved using the <code>ReadClient</code> callback; some
- ISAPI extensions may not support the <code>ReadClient</code> function.
- Refer questions to the ISAPI extension's author.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ISAPILogNotSupported</name>
- <description>Log unsupported feature requests from ISAPI
- extensions</description>
- <syntax>ISAPILogNotSupported on|off</syntax>
- <default>ISAPILogNotSupported off</default>
- <contextlist><context>server config</context><context>virtual host</context>
- <context>directory</context><context>.htaccess</context></contextlist>
- <override>FileInfo</override>
-
- <usage>
- <p>Logs all requests for unsupported features from ISAPI
- extensions in the server error log. This may help administrators
- to track down problems. Once set to on and all desired ISAPI modules
- are functioning, it should be set back to off.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ISAPIAppendLogToErrors</name>
- <description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
- ISAPI extensions to the error log</description>
- <syntax>ISAPIAppendLogToErrors on|off</syntax>
- <default>ISAPIAppendLogToErrors off</default>
- <contextlist><context>server config</context><context>virtual host</context>
- <context>directory</context><context>.htaccess</context></contextlist>
- <override>FileInfo</override>
-
- <usage>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the server error log.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ISAPIAppendLogToQuery</name>
- <description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
- ISAPI extensions to the query field</description>
- <syntax>ISAPIAppendLogToQuery on|off</syntax>
- <default>ISAPIAppendLogToQuery on</default>
- <contextlist><context>server config</context><context>virtual host</context>
- <context>directory</context><context>.htaccess</context></contextlist>
- <override>FileInfo</override>
-
- <usage>
- <p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
- extensions to the query field (appended to the <directive
- module="mod_log_config">CustomLog</directive> <code>%q</code>
- component).</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ISAPIFakeAsync</name>
- <description>Fake asynchronous support for ISAPI callbacks</description>
- <syntax>ISAPIFakeAsync on|off</syntax>
- <default>ISAPIFakeAsync off</default>
- <contextlist><context>server config</context><context>virtual host</context>
- <context>directory</context><context>.htaccess</context></contextlist>
- <override>FileInfo</override>
-
- <usage>
- <p>While set to on, asynchronous support for ISAPI callbacks is
- simulated.</p>
- </usage>
- </directivesynopsis>
-
- </modulesynopsis>
-
-